﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using Detai.Admin.Models;
using Detai.Admin.ViewModels;
using Detai.Admin.Properties;
using Detai.Lib.Common;
namespace Detai.Admin.Controllers
{
    public class BaitapController : Controller
    {

        DetaiDataContext eDataContext = new DetaiDataContext();

        [Authorize()]
        public ActionResult Index()
        {
            BaitapIndexViewModel model = new BaitapIndexViewModel();
            model.Baitaps = eDataContext.Baitaps.ToList();
            model.UrlHostSite = Settings.Default.UrlHostSite;
            model.currentLopId = Convert.ToInt32(UserState.getUserStateFromRequest("Lop.Malop", "Malop", 0));
            model.Lops = eDataContext.Lops.ToList();
            model.Baitaps = eDataContext.Lophoc_BTs.Where(e => model.currentLopId > 0 ? e.Malop == model.currentLopId : true).Select(e => e.Baitap).Distinct().ToList();
            return View(model);
        }


        [Authorize()]
        public ActionResult Create()
        {
            BaitapEditViewModel model = new BaitapEditViewModel();
            model.Lops = eDataContext.Lops.ToList();
            model.Giangviens = eDataContext.Giangviens.ToList();
            return View(model);
        }
        [Authorize()]
        public ActionResult Details(int id)
        {
            var model = eDataContext.Baitaps.FirstOrDefault(e => e.MaBT == id);
            return View(model);
        }

        [HttpPost]
        [Authorize()]
        [ValidateInput(false)]
        public ActionResult Create(BaitapEditViewModel formData)
        {
            try
            {
                UpdateModel(formData);
                formData.Baitap.Ngaybatdau = Request["Ngaybd"] != null && Request["Ngaybd"].ToString() != string.Empty ? Utils.ParseDateTime(Request["Ngaybd"].ToString(), new System.Globalization.CultureInfo("vi-VN")) : (DateTime?)null;
                formData.Baitap.Hannop = Request["Hannopbai"] != null && Request["Hannopbai"].ToString() != string.Empty ? Utils.ParseDateTime(Request["Hannopbai"].ToString(), new System.Globalization.CultureInfo("vi-VN")) : (DateTime?)null;
                formData.Baitap.Ngaytao = DateTime.Now;
                eDataContext.Baitaps.InsertOnSubmit(formData.Baitap);
                eDataContext.SubmitChanges();
                //Map giữa lớp học và bài tập
                foreach (var item in eDataContext.Lops.ToList())
                {
                    var istChecked = "false";
                    if (Request["lop_" + item.Malop] != null) istChecked = Request["lop_" + item.Malop];
                    if (istChecked.ToLower() == "true")
                    {
                        Lophoc_BT lbt = new Lophoc_BT();
                        lbt.MaBT = formData.Baitap.MaBT;
                        lbt.Malop = item.Malop;
                        eDataContext.Lophoc_BTs.InsertOnSubmit(lbt);
                    }
                }
                // upload file đính kèm nếu có
                HttpPostedFileBase file = Request.Files["filebt"];
                if (file != null && file.ContentLength > 0)
                {
                    formData.Baitap.DuongdanFile = Uploads.UploadFile(file,Settings.Default.SiteRootPath, Settings.Default.BaitapPath, formData.Baitap.MaBT.ToString());
                }
                eDataContext.SubmitChanges();
                return RedirectToAction("Index");
            }
            catch
            {
                ViewData["MessageInfo"] = "Thêm bài tập không thành công. Bạn vui lòng nhập lại dữ liệu.";
                return View();
            }
        }

        [Authorize()]
        public ActionResult Edit(int id)
        {
            BaitapEditViewModel model = new BaitapEditViewModel();
            model.Lops = eDataContext.Lops.ToList();
            model.Giangviens = eDataContext.Giangviens.ToList();
            model.LopIds = eDataContext.Lophoc_BTs.Where(e => e.MaBT == id).Select(e => e.Malop).ToList();
            model.Baitap = eDataContext.Baitaps.FirstOrDefault(e => e.MaBT == id);
            return View(model);
        }

        [HttpPost]
        [Authorize()]
        [ValidateInput(false)]
        public ActionResult Edit(int id, BaitapEditViewModel formData)
        {
            try
            {
                formData.Baitap = eDataContext.Baitaps.FirstOrDefault(e => e.MaBT == id);
                UpdateModel(formData);
                
                // Xóa danh sách map cũ
                var oldlistmap = eDataContext.Lophoc_BTs.Where(e => e.MaBT == id).ToList();
                if(oldlistmap.Count() >0) eDataContext.Lophoc_BTs.DeleteAllOnSubmit(oldlistmap);
                //Cập nhật lại Map giữa lớp học và bài tập
                foreach (var item in eDataContext.Lops.ToList())
                {
                    var istChecked = "false";
                    if (Request["lop_" + item.Malop] != null) istChecked = Request["lop_" + item.Malop];
                    if (istChecked.ToLower() == "true")
                    {
                        Lophoc_BT lbt = new Lophoc_BT();
                        lbt.MaBT = formData.Baitap.MaBT;
                        lbt.Malop = item.Malop;
                        eDataContext.Lophoc_BTs.InsertOnSubmit(lbt);
                    }
                }
                
                // upload file đính kèm nếu có
                HttpPostedFileBase file = Request.Files["filebt"];
                if (file != null && file.ContentLength > 0)
                {
                    // Xóa file cũ nếu có
                    if (!string.IsNullOrEmpty(formData.Baitap.DuongdanFile)) Uploads.DeleteFile( Settings.Default.SiteRootPath + formData.Baitap.DuongdanFile.Replace("/", "\\"));
                    formData.Baitap.DuongdanFile = Uploads.UploadFile(file,Settings.Default.SiteRootPath, Settings.Default.BaitapPath, formData.Baitap.MaBT.ToString());
                }
                eDataContext.SubmitChanges();
                return RedirectToAction("Index");
            }
            catch
            {
                return View();
            }
        }

        [Authorize()]
        public ActionResult Delete(int id)
        {
            var item = eDataContext.Baitaps.FirstOrDefault(e => e.MaBT== id);
            return View(item);
        }

        [HttpPost]
        [Authorize()]
        public ActionResult Delete(int id, Baitap fromdata)
        {
            try
            {
                var item = eDataContext.Baitaps.FirstOrDefault(e => e.MaBT == id);
                if (item != null)
                {
                  //Trường hợp yêu cầu xóa
                    //Xóa map với lớp học
                    //var baitap_lophoc = eDataContext.Lophoc_BTs.Where(e => e.MaBT == id).ToList();
                   //if(baitap_lophoc.Count() >0) eDataContext.Lophoc_BTs.DeleteAllOnSubmit(baitap_lophoc);
                    // Xóa các bài giải liên quan
                    //var baigiai = eDataContext.Baigiais.Where(e => e.MaBT == id).ToList();
                    //if (baigiai.Count() > 0) eDataContext.Baigiais.DeleteAllOnSubmit(baigiai);


                    // Xóa file bài tập nếu có
                    if(!string.IsNullOrEmpty(item.DuongdanFile)) Uploads.DeleteFile(Settings.Default.SiteRootPath + item.DuongdanFile.Replace("/", "\\"));
                    // Xóa bài tập
                    eDataContext.Baitaps.DeleteOnSubmit(item);
                    eDataContext.SubmitChanges();
                }
                return RedirectToAction("Index");
            }
            catch
            {
                return View();
            }
        }
    }
}
